package com.gem.day09;

/**
 * 本类用来演示Java包装类
 * 
 * 基本类型						包装类型
 * byte								Byte
 * short							Short
 * int									Integer
 * long								Long
 * float								Float
 * double							Double
 * char								Character
 * boolean						Boolean
 * 
 * 注意:
 * 1.包装类是对象类型,它提供了操作数据的属性/方法
 * 2.所有数字类型包装类的父类是java.lang.Number抽象类
 * 
 * @author easonsy
 * 2020年7月28日 下午2:00:01
 */
public class IntegerDemo {
	public static void main(String[] args) {
		//属性
		//获取对象的类型
		System.out.println(Integer.TYPE);

		//获取对象的最值
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);

		//JDK5.0提供了自动封箱
		/*
		 * 自动封箱本质是调用了valueOf()方法
		 */
		Integer i1 = 3;
		Integer i2 = 3;
		Integer i3 = 300;
		Integer i4 = 300;
		Integer ii1 = new Integer(5);
		Integer ii2 = new Integer(5);
		//自动解箱
		//int i2 = i1;

		//常用方法
		//1.比较方法
		//比较规则,小于是-1,等于是0,大于是1
		int r1 = i1.compareTo(i3);
		System.out.println(r1);

		int r2 = Integer.compare(i1, i3);
		System.out.println(r2);

		//2.把字符串解析成包装类
		//注意:如果传入非数字字符串,则抛出:java.lang.NumberFormatException
		Integer i5 = Integer.decode("123");
		System.out.println(i5 + 1);

		//注意:valueOf()方法既可以传入基本类型,也可以传入String,转换成包装类
		//Integer i6 = Integer.valueOf("123");
		Integer i6 = Integer.valueOf(123);
		System.out.println(i6 + 1);

		System.out.println(Integer.toBinaryString(7));//111
		System.out.println(Integer.toOctalString(8));//10
		System.out.println(Integer.toHexString(16));//10
		System.out.println(Integer.valueOf("111", 2));

		//3.比较相等,Integer中重写了equals()方法,比较的是值
		System.out.println(ii1.equals(ii2));
		System.out.println(ii1 == ii2);

		/*
		 * 解释:
		 * 自动封箱本质是调用了valueOf()方法,该方法内部是运行机制:
		 * 如果值在-128~127之间,则数据是从缓冲池中获取同样的值(没有创建新对象,即内存地址相同),
		 * 如果数据不在该范围,则使用new Integer(...),所以内存地址不同
		 */
		System.out.println(i1 == i2);//true
		System.out.println(i3 == i4);//false

		//3.获取最值
		System.out.println(Integer.max(3, 4));

		//4.把字符串转换成基本类型
		int r3 = Integer.parseInt("123");
		System.out.println(r3);
	}
}
